package com.java2007.zhangyu.restaurant.service.impl;

import com.java2007.zhangyu.restaurant.dao.FoodDao;
import com.java2007.zhangyu.restaurant.dao.impl.FoodDaoImpl;
import com.java2007.zhangyu.restaurant.entity.CartItem;
import com.java2007.zhangyu.restaurant.pojo.Food;
import com.java2007.zhangyu.restaurant.service.CartService;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

/**
 * @author zy
 * @Version
 * @date 2021/01/29
 */
public class CartServiceImpl implements CartService {
    private FoodDao foodDao = new FoodDaoImpl();

    /**
     * 将所选菜品加入购物车
     * @param fId 菜品ID
     * @param num 增加的数量
     * @param cart 尚未加入所选菜品的购物车
     * @return
     * @throws SQLException
     */
    @Override
    public List<CartItem> add(int fId, int num, List<CartItem> cart) throws SQLException {
        //判断加入购物车的数量是否合理
        if(num <= 0) {
            throw new RuntimeException("数量必须是正整数...");
        }

        for (CartItem cartItem : cart) {
            //判断加入的商品在原来的购物车中是否存在?
            if (cartItem.getfId().intValue() == fId) {
                //存在，更新数量、价格、更新时间
                cartItem.setNum(cartItem.getNum() + num);
                if(cartItem.getNum() <= 0) {
                    //数量 <=0，就不应该在餐车中出现
                    cart.remove(cartItem);
                }
                cartItem.setTotalPrice(cartItem.getNum() * cartItem.getfPrice());
                cartItem.setoUpdateTime(new Date());
                return cart;
            }
        }

        //加入的商品在原来的购物车中不存在
        Food food = foodDao.queryByFoodId(fId);
        //购物项
        CartItem cartItem = new CartItem();
        cartItem.setfId(fId);
        cartItem.setNum(num);
        cartItem.setfName(food.getfName());
        cartItem.setfPrice(food.getfPrice());
        cartItem.setTotalPrice(cartItem.getfPrice() * cartItem.getNum());
        cartItem.setoCreateTime(new Date());
        cartItem.setoUpdateTime(new Date());
        //购物餐车
        cart.add(cartItem);

        return cart;
    }
}
